/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.contrat.assembler;

import org.apache.commons.lang.StringUtils;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.contrat.om.IContrat;
import fr.generali.accueilclient.contrat.om.impl.Contrat;
import fr.generali.accueilclient.resume.contrat.om.impl.Role;
import fr.generali.accueilclient.utils.constantes.CodeRoleEnum;
import fr.generali.souscriptiongestion.dommages.tosca.recherchercontrats.ctr.structurecontrat.DTOContrat;

/**
 * @author ebrouillard
 */
@Component("contrat2ContratConverter")
public class Contrat2ContratConverter implements Converter<DTOContrat, IContrat> {

    /**
     * {@inheritDoc}
     */
    public IContrat convert(DTOContrat input) {
        IContrat contratLu = null;

        if (input != null) {
            contratLu = new Contrat();
            contratLu.setNumeroContrat(input.getIdentifiant());
            if (input.getCategorieStatistiqueDetailleeProduit() != null) {
                contratLu.setCodeProduit(input.getCategorieStatistiqueDetailleeProduit().getCodeDetaille());
                contratLu.setCodeStatistique(input.getCategorieStatistiqueDetailleeProduit().getCodeStatistique());
                contratLu.setLibelleProduit(input.getCategorieStatistiqueDetailleeProduit().getLibelleDetaille());
            }
            contratLu.setCodeCompagnie(input.getCodeSocieteduGroupe());
            contratLu.setCodePortefeuille(input.getPortefeuilleContrat().getIdentifiant());
            contratLu.setCodeStatut(input.getCodeStatutContrat());
            if (input.getDateEffet() != null) {
                contratLu.setDateCreation(input.getDateEffet().toGregorianCalendar().getTime());
            }
            contratLu.setIntermediaire(input.getPortefeuilleContrat().getIdentifiantApporteurAffaires());
            if (input.getSouscripteurContrat() != null) {
                contratLu.setSouscripteur(new Role());
                contratLu.getSouscripteur().setRole(CodeRoleEnum.ROLE_SOUSCRIPTEUR.getCodeRole());
                contratLu.getSouscripteur().setNumeroClient(input.getSouscripteurContrat().getIdentifiantPersonne());
                contratLu.getSouscripteur().setNom(input.getSouscripteurContrat().getNomCourant());
                contratLu.getSouscripteur().setPrenom(input.getSouscripteurContrat().getPrenom());
            }
            if (input.getPayeurPrimes() != null) {
                contratLu.setPayeur(new Role());
                contratLu.getPayeur().setNumeroClient(input.getPayeurPrimes().getIdentifiantPersonne());
                if (StringUtils.isNotEmpty(input.getPayeurPrimes().getIdentifiantPersonne())
                                && StringUtils.isNotEmpty(input.getSouscripteurContrat().getIdentifiantPersonne())
                                && input.getPayeurPrimes().getIdentifiantPersonne().equals(
                                                input.getSouscripteurContrat().getIdentifiantPersonne())) {
                    contratLu.getPayeur().setNom(input.getSouscripteurContrat().getNomCourant());
                    contratLu.getPayeur().setPrenom(input.getSouscripteurContrat().getPrenom());
                }
                contratLu.getPayeur().setRole(CodeRoleEnum.ROLE_PAYEUR.getCodeRole());
            }
        }

        return contratLu;
    }
}
